package com.zenithmind.document.service;

/**
 * 文档处理服务接口
 * 遵循接口隔离原则：专注于文档处理功能
 * 遵循单一职责原则：只负责文档内容处理相关操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface DocumentProcessService {

    /**
     * 转换文档格式
     * 
     * @param id 文档ID
     * @param targetFormat 目标格式
     * @param userId 用户ID
     * @return 新文档ID
     */
    String convertDocument(String id, String targetFormat, String userId);

    /**
     * 提取文档内容
     * 
     * @param id 文档ID
     * @return 文档内容
     */
    String extractDocumentContent(String id);

    /**
     * 生成文档摘要
     * 
     * @param id 文档ID
     * @return 文档摘要
     */
    String generateDocumentSummary(String id);

    /**
     * 生成文档预览
     * 
     * @param id 文档ID
     * @return 预览URL
     */
    String generateDocumentPreview(String id);

    /**
     * 生成文档缩略图
     * 
     * @param id 文档ID
     * @return 缩略图URL
     */
    String generateDocumentThumbnail(String id);

    /**
     * 压缩文档
     * 
     * @param id 文档ID
     * @param quality 压缩质量
     * @return 压缩后文档ID
     */
    String compressDocument(String id, Integer quality);

    /**
     * 加密文档
     * 
     * @param id 文档ID
     * @param password 密码
     * @param algorithm 加密算法
     * @return 是否成功
     */
    Boolean encryptDocument(String id, String password, String algorithm);

    /**
     * 解密文档
     * 
     * @param id 文档ID
     * @param password 密码
     * @return 是否成功
     */
    Boolean decryptDocument(String id, String password);

    /**
     * 水印处理
     * 
     * @param id 文档ID
     * @param watermarkText 水印文本
     * @param position 水印位置
     * @return 是否成功
     */
    Boolean addWatermark(String id, String watermarkText, String position);

    /**
     * 文档合并
     * 
     * @param documentIds 文档ID列表
     * @param userId 用户ID
     * @return 合并后文档ID
     */
    String mergeDocuments(java.util.List<String> documentIds, String userId);

    /**
     * 文档拆分
     * 
     * @param id 文档ID
     * @param splitRule 拆分规则
     * @param userId 用户ID
     * @return 拆分后文档ID列表
     */
    java.util.List<String> splitDocument(String id, String splitRule, String userId);

    /**
     * OCR文字识别
     * 
     * @param id 文档ID
     * @return 识别的文字内容
     */
    String performOCR(String id);

    /**
     * 文档校验
     * 
     * @param id 文档ID
     * @return 校验结果
     */
    Boolean validateDocument(String id);

    /**
     * 文档修复
     * 
     * @param id 文档ID
     * @return 是否成功
     */
    Boolean repairDocument(String id);
}
